package com.ld.admin.service.system;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Service;

import com.ld.admin.model.system.SysConfigModel;
import com.ld.shieldsb.common.web.BasicService;
import com.ld.shieldsb.dao.model.QueryModel;

/**
 * 
 * 系统参数表服务类，@Service注解用于自动注入
 * 
 * @ClassName SysConfigService
 * @author <a href="mailto:donggongai@126.com" target="_blank">吕凯</a>
 * @date 2019年07月30日 11:07:36
 *
 */
@Service
public class SysConfigService extends BasicService {

    /**
     * 覆盖获取QueryModel的方法，重新默认排序方法，按orders排序
     * 
     * @Title getQueryModel
     * @author 吕凯
     * @date 2019年7月30日 上午11:42:28
     * @return
     * @see com.ld.shieldsb.common.web.BasicService#getQueryModel()
     */
    @Override
    public QueryModel getQueryModel() {
        QueryModel queryModel = super.getQueryModel();
        queryModel.setOrder(SysConfigModel::getOrders, false);
        return queryModel;
    }

    /**
     * 覆盖获取QueryModel的方法，重新默认排序方法，按orders排序
     * 
     * @Title extendDealQuery
     * @author 吕凯
     * @date 2019年7月30日 上午11:53:05
     * @param queryModel
     * @return
     * @see com.ld.shieldsb.common.web.BasicService#extendDealQuery(com.ld.shieldsb.dao.model.QueryModel)
     */
    @Override
    protected QueryModel extendDealQuery(QueryModel queryModel) {
        queryModel.setOrder(SysConfigModel::getOrders, false);
        return queryModel;
    }

    /**
     * 获取顶级参数
     * 
     * @Title getTopConfigs
     * @author 吕凯
     * @date 2019年7月30日 上午11:36:54
     * @param request
     *            void
     */
    public void getTopConfigs(HttpServletRequest request) {
        QueryModel queryModel = getValidQueryModel();
        queryModel.addEq(SysConfigModel::getPid, 0);
        request.setAttribute("topConfigs", getList(SysConfigModel.class, queryModel)); // 加载所有顶级分类
    }

    /**
     * 获取系统参数，并设置到request中，参数名为configs，注意多个覆盖的问题
     * 
     * @Title getConfigs
     * @author 吕凯
     * @date 2019年7月30日 上午11:39:24
     * @param request
     * @param parentConfigId
     *            父类参数
     * @return List<SysConfigModel>
     */
    public List<SysConfigModel> getConfigs(HttpServletRequest request, Long parentConfigId) {
        List<SysConfigModel> list = getConfigs(parentConfigId);
        request.setAttribute("configs", list); // 加载所有顶级分类
        return list;
    }

    /**
     * 根据父类编号获取子类系统参数
     * 
     * @Title getConfigs
     * @author 吕凯
     * @date 2019年7月30日 上午11:40:02
     * @param parentConfigId
     *            父类参数
     * @return List<SysConfigModel>
     */
    public List<SysConfigModel> getConfigs(Long parentConfigId) {
        QueryModel queryModel = getValidQueryModel();
        queryModel.addEq(SysConfigModel::getPid, parentConfigId);
        return getList(SysConfigModel.class, queryModel); // 获取
    }

    /**
     * 根据id 获取参数
     * 
     * @Title getConfig
     * @author 吕凯
     * @date 2020年6月10日 上午8:52:17
     * @param configId
     * @return SysConfigModel
     */
    public SysConfigModel getConfig(Long configId) {
        return getOne(SysConfigModel.class, configId); // 获取
    }

    /**
     * 获取参数值
     * 
     * @Title getConfigValue
     * @author 吕凯
     * @date 2020年6月10日 上午8:52:00
     * @param configId
     * @return String
     */
    public String getConfigValue(Long configId) {
        QueryModel queryModel = getValidQueryModel();
        queryModel.setSelectFields(SysConfigModel::getValue);
        queryModel.addEq(SysConfigModel::getId, configId);
        return getOne(SysConfigModel.class, queryModel).getValue(); // 获取
    }

}
